package gropack;

public class IntExpr extends UnaryExpr {
	int valeur;

	public IntExpr(int v) {
		valeur = v;
	}
	
	@Override
	public UnaryExpr plus(UnaryExpr e){
		return  e.plusInt(this);
	}
	@Override
	public UnaryExpr moins(UnaryExpr e){
		return  e.moinsInt(this);
	}
	@Override
	public UnaryExpr div(UnaryExpr e){
		return  e.divInt(this);
	}
	@Override
	public UnaryExpr mult(UnaryExpr e){
		return  e.multInt(this);
	}
	// Int
	@Override
	public UnaryExpr plusInt(IntExpr e){
		return new IntExpr(this.getValeur() + e.getValeur());
	}
	@Override
	public UnaryExpr moinsInt(IntExpr e){
		return new IntExpr(this.getValeur() - e.getValeur());
	}
	@Override
	public UnaryExpr divInt(IntExpr e){
		return new IntExpr(this.getValeur() / e.getValeur());
	}
	@Override
	public UnaryExpr multInt(IntExpr e){
		return new IntExpr(this.getValeur() * e.getValeur());
	}
	// Float
	@Override
	public UnaryExpr plusFloat(FloatExpr e) {
		return new FloatExpr(this.getValeur() + e.getValeur());
	}
	@Override
	public UnaryExpr moinsFloat(FloatExpr e) {
		return new FloatExpr(this.getValeur() - e.getValeur());
	}
	@Override
	public UnaryExpr multFloat(FloatExpr e) {
		return new FloatExpr(this.getValeur() * e.getValeur());
	}
	@Override
	public UnaryExpr divFloat(FloatExpr e) {
		return new FloatExpr(this.getValeur() / e.getValeur());
	}
	
	public int getValeur(){
		return this.valeur;
	}
	
	public void accept(Visitor v){
		v.visitIntExpr(this);
	}
	
	public boolean equals(Object o){
		IntExpr i = (IntExpr)o;
		return (this.getValeur() == i.getValeur());
	}
}